#pragma once
/*--------------------------------------------------------------------------------
 * Adaptive Intelligence - Foundation Framework Class Library
 * Version 2.00
 * 
 * User Path Information Class
 *      Represents the shell folder locations for a specified user account.
 *------------------------------------------------------------------------------*/

/*--------------------------------------------------------------------------------
 * System Imports
 *------------------------------------------------------------------------------*/
#include "stdafx.h"
using namespace System;
using namespace System::Runtime;
using namespace System::Runtime::InteropServices;

using namespace Adaptive::Foundation;

namespace Adaptive
{
	namespace Win32
	{
		/// <summary>
		/// Represents the shell folder locations for a specified user account.
		/// </summary>
		public ref class UserPathInfo sealed : public DisposableObjectBase
		{
		public:
			/*--------------------------------------------------------------------------------
			 * Constructor / Dispose / Destructor Methods
			 *------------------------------------------------------------------------------*/
			#pragma region Constructor / Dispose / Destructor Methods
			/// <summary>
			/// Initializes a new instance of the class.
			/// </summary>
			/// <remarks>
			/// This is the default constructor.
			/// </remarks>
			UserPathInfo();
			/// <summary>
			/// Initializes a new instance of the class for the specified user name.
			/// </summary>
			/// <param name="userName">
			/// The ID of the user whose profile is being represented.
			/// </param>
			UserPathInfo(String^ userName);
			/// <summary>
			/// Deallocates internally allocated objects.
			/// </summary>
			~UserPathInfo();
			#pragma endregion

			/*--------------------------------------------------------------------------------
			 * Public Properties
			 *------------------------------------------------------------------------------*/
			#pragma region Public Properties
			/// <summary>
			/// Gets the user name for the account.
			/// </summary>
			/// <value>
			/// A user name defining a local or roaming account profile.
			/// </value>
			property String^ UserName { String^ get(); }
			/// <summary>
			/// Gets or sets the name of the Internet temporary cache / files folder.
			/// </summary>
			/// <value>
			/// A fully qualified Win32 path indicating the location of the tempoary Internet files.
			/// </value>
			property String^ Cache {String^ get(); void set(String^ value); }
			/// <summary>
			/// Gets or sets the name of the Internet cookies folder.
			/// </summary>
			/// <value>
			/// A fully qualified Win32 path indicating the location of the cookie files.
			/// </value>
			property String^ Cookies  {String^ get(); void set(String^ value); }
			/// <summary>
			/// Gets or sets the name of the account's recent document folder.
			/// </summary>
			/// <value>
			/// A fully qualified Win32 path indicating the location of the account's recent document files.
			/// </value>
			property String^ Recent {String^ get(); void set(String^ value); }
			/// <summary>
			/// Gets or sets the name of the Internet history folder.
			/// </summary>
			/// <value>
			/// A fully qualified Win32 path indicating the location of the history files.
			/// </value>
			property String^ History {String^ get(); void set(String^ value); }
			/// <summary>
			/// Gets or sets the name of the general local settings folder.
			/// </summary>
			/// <value>
			/// A fully qualified Win32 path indicating the location of the local settings folder.
			/// </value>
			property String^ LocalSettings {String^ get(); void set(String^ value); }
			#pragma endregion

			/*--------------------------------------------------------------------------------
			 * Public Methods / Functions
			 *------------------------------------------------------------------------------*/
			#pragma region Public Methods / Functions
			/// <summary>
			/// Clears the contents of the object instance without disposing of the instance.
			/// </summary>
			void Clear();
			#pragma endregion

		private:
			/*--------------------------------------------------------------------------------
			 * Private Member Declarations
			 *------------------------------------------------------------------------------*/
			#pragma region Private Member Declarations
			/// <summary>
			/// User name value.
			/// </summary>
			String^ _userName;
			/// <summary>
			/// Internet temporary cache / files folder.
			/// </summary>
			String^ _cache;
			/// <summary>
			/// Internet cookies folder.
			/// </summary>
			String^ _cookies;
			/// <summary>
			/// Recent documents folder.
			/// </summary>
			String^ _recent;
			/// <summary>
			/// Internet history folder.
			/// </summary>
			String^ _history;
			/// <summary>
			/// Local settings folder.
			/// </summary>
			String^ _localSettings;
			#pragma endregion
		};
	}
}